#ifndef NO_CONTROL_H
#define	NO_CONTROL_H

#include <HD/hd.h>
#include <HDU/hduError.h>
#include <HDU/hduVector.h>

#include <Eigen/Core>
#include <boost/date_time/posix_time/posix_time.hpp>

namespace controllers
{
	class No_Control
	{
	public:
		No_Control();
		~No_Control();

		bool init(std::vector<HHD> &hHD);
		void starting(const boost::posix_time::ptime& time);
		void update(const boost::posix_time::ptime& time, const boost::posix_time::time_duration& period);
		void command();
		void stopping(const boost::posix_time::ptime& time);

	private:
		boost::posix_time::ptime start_time_;

		std::vector<HHD> _hHD;

		Eigen::Vector3d kStiffness; /* N/mm */
		Eigen::Vector3d kDamping; /* N/mm^2 */
		double kGravityWellInfluence; /* mm */

		/* This is the position of the gravity well in cartesian
		(i.e. x,y,z) space. */
		Eigen::Vector3d wellPos;
		Eigen::Vector3d wellVel;

		HDErrorInfo error;
		hduVector3Dd hdu_position[2];
		hduVector3Dd hdu_velocity[2];
		hduVector3Dd hdu_force[2];

		Eigen::Vector3d position[2];
		Eigen::Vector3d velocity[2];
		Eigen::Vector3d force[2];
		Eigen::Vector3d force_p[2];
		Eigen::Vector3d force_d[2];
		Eigen::Vector3d positionTwell[2];
		Eigen::Vector3d velocityTwell[2];
	};

}

#endif	/* NO_CONTROL_H */